package com.ikingtech.platform.service.system.user.service;

import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ikingtech.framework.sdk.enums.system.user.UserSocialTypeEnum;
import com.ikingtech.framework.sdk.utils.Tools;
import com.ikingtech.platform.service.system.user.entity.UserSocialDO;
import com.ikingtech.platform.service.system.user.mapper.UserSocialMapper;
import org.springframework.stereotype.Service;

import java.util.Collections;
import java.util.List;

/**
 * @author tie yan
 */
@Service
public class UserSocialRepository extends ServiceImpl<UserSocialMapper, UserSocialDO> {

    public String getUserIdBySocialIdAndSocialNo(String socialId, String socialNo) {
        return this.getObj(Wrappers.<UserSocialDO>lambdaQuery()
                .select(UserSocialDO::getUserId)
                .eq(UserSocialDO::getSocialId, socialId)
                .eq(UserSocialDO::getSocialNo, socialNo), String.class::cast);
    }

    public List<UserSocialDO> listBySocialNos(List<String> socialNos) {
        return this.list(Wrappers.<UserSocialDO>lambdaQuery().in(UserSocialDO::getSocialNo, socialNos));
    }

    public List<UserSocialDO> listByUserId(String userId) {
        return this.list(Wrappers.<UserSocialDO>lambdaQuery().eq(UserSocialDO::getUserId, userId));
    }

    public List<UserSocialDO> listByUserIds(List<String> userIds) {
        if (Tools.Coll.isBlank(userIds)) {
            return Collections.emptyList();
        }
        return this.list(Wrappers.<UserSocialDO>lambdaQuery().in(UserSocialDO::getUserId, userIds));
    }

    public void removeByUserId(String userId) {
        this.remove(Wrappers.<UserSocialDO>lambdaQuery().eq(UserSocialDO::getUserId, userId));
    }

    public List<UserSocialDO> listByUserIdAndSocialTypeAndSocialId(String userId, List<UserSocialTypeEnum> socialTypes, List<String> socialIds) {
        return this.list(Wrappers.<UserSocialDO>lambdaQuery()
                .eq(UserSocialDO::getUserId, userId)
                .in(UserSocialDO::getSocialType, socialTypes)
                .in(UserSocialDO::getSocialId, socialIds));
    }
}
